//
//  HMHomeCellViewModel.swift
//  HMWeiBo
//
//  Created by Apple on 16/8/1.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

class HMHomeCellViewModel: NSObject {

    var statusModel: HMStatusModel?
    
    // 返回一个昵称
    var screen_name: String? {
        
        return statusModel?.user?.screen_name
        
    }
    
    
    // 返回一个头像的url
    var photoUrl: NSURL? {
        // if ; ?? ; if let gurad
        return NSURL(string: statusModel?.user?.profile_image_url ?? "")
    }
    // 返回一个 认证的UIImage
    var verfited_Image: UIImage? {
     /// 认证类型 -1：没有认证，0，认证用户，2,3,5: 企业认证，220: 达人
        switch  statusModel?.user?.verified_type ?? -1 {
        
        case -1: return UIImage()
        case 0: return UIImage(named: "avatar_vip")
        case 2,3,5: return UIImage(named: "avatar_enterprise_vip")
        case 220: return UIImage(named: "avatar_grassroot")
        
        default: return UIImage()
            
        }
        
    }
    
    var level_Image: UIImage? {
        
        if let num = statusModel?.user?.mbrank {
            
            return UIImage(named: "common_icon_membership_level\(num)")
        } else {
            return UIImage()
        }
        
    }
    
    // 返回评论数量的字符串
    var retweet_String: String? {
        
        if let count = statusModel?.reposts_count {
            if count > 0 {
                
                return "\(count)"
            } else {
                return "转发"
            }
        } else {
            
            return "转发"
        }
        
//        return "\(statusModel?.reposts_count)"
        
    }
    
    var source_String: String? {
        
        return dealSource(statusModel?.source)
    }
    
    var createat_String: String?{
        
        return dealTime()
    }
    
    // 对来源字符串的处理
    // 返回有可能有值,有可能没有值,就返回可选项
    func dealSource(sourceString: String?) -> String?{
        /*
            <a href=\"http://app.weibo.com/t/feed/3auC5p\" rel=\"nofollow\"
            皮皮时光机</a
        
        
            皮皮时光机
            /a
        */
        // "<a href=\"http://app.weibo.com/t/feed/3auC5p\" rel=\"nofollow\">皮皮时光机</a>"
        // "<a href=\"http://app.weibo.com/t/feed/2cEJdS\" rel=\"nofollow\">IT之家</a>"
        // "<a href=\"http://app.weibo.com/t/feed/UaVsq\" rel=\"nofollow\">UC浏览器电脑版</a>"
        
//        let sourceString = "<a href=\"http://app.weibo.com/t/feed/3auC5p\" rel=\"nofollow\">皮皮时光机</a>"
        // componentsSeparatedByString 可以根据分割标识符,来把字符串分割成几部分
        
        // 虽然 sourceString = sourceString 名字一样,但是值已经解包
        guard let sourceString = sourceString else {
            return nil
        }
        
        let sourceArray = sourceString.componentsSeparatedByString(">")
        
       // 为了防止崩溃,我们需要判断一下
        if sourceArray.count >= 2{
            
            let subSourceString = sourceArray[1]
            
            // 再次进行分割
            let subSoucreArray = subSourceString.componentsSeparatedByString("<")
            
            if subSoucreArray.count >= 1 {
                
                return subSoucreArray[0]
            }
            
            
        } else {
            
            return nil
        }
        
        return nil
        
    }
     // Thu Aug 04 17:09:46 +0800 2016
    func dealTime() -> String{
        
        // 1. 把服务器返回的非标准时间,转换成标准时间
        // 标准时间: 2016-08-04 17:16:33 +0800
        let createat = "Thu Aug 04 17:09:46 +0800 2016"
        
        // 1.1 实例化一个 datefomatter
        let formatter = NSDateFormatter()
        // 1.1.1设置 datefomatter的属性
        formatter.locale = NSLocale(localeIdentifier: "en_US")
        // 注意: dateFormat 的格式选取哪个? 是根据你填写的字符串来规定
        /*
        设置日期格式 （声明字符串里面每个数字和单词的含义）
        E：星期
        M: 月份
        d：日
        H: 24小时
        m: 分
        s: 秒
        y: 年
        */
        formatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        
        // 1.2 获取时间
        guard let date = formatter.dateFromString(createat) else{
            return ""
        }
//        printLog(date)
//        printLog(NSDate())
        
        
        // 2. 借助于日历,对时间进行比较
        
        // 2.1 获取一个日历对象
        let cal = NSCalendar.currentCalendar()
        
        // 2.2 设置一下时间比较的 枚举类型
        // 2016-08-04 09:09:46 +0000 -- 现在时间
        // 2015-08-04 09:09:46 +0000 -- 获取的时间
        let unit = NSCalendarUnit(arrayLiteral: .Year,.Month,.Day,.Hour,.Minute)
        
        // 2.3 比较时间
        
        /*
            第一个参数: 要比较哪些 枚举类型
            第二个参数: 获取字符串的时间
            第三个参数: 当前时间
        */
        // 2016-08-04 09:09:46 +0000 -- 现在时间
        // 2015-08-04 09:09:46 +0000 -- 获取的时间
        // toDate.year - fromDate.year = 
        // 2016 - 2015 = 1
        let comps = cal.components(unit, fromDate: date, toDate: NSDate(), options: [])
        
        if comps.year == 0 {
            
            // 今年
            printLog(comps.year)
        } else if comps.year > 0 {
            
            // 去年以及过去
            
        }
        
        
        
        return ""
    }
    
    
    
    //
    func dealEmoticon(weiboString: String?) -> NSAttributedString? {
        
        guard let weiboString = weiboString else {
            return nil
        }
        
         let beforeAttribute = NSMutableAttributedString(string: weiboString)
        
        do {
        
        // 哈哈[哈哈][哈哈]
        // 把 [哈哈] -> HMEmoticon -> 把 对象里的图片放到NSAttrributeString
        
            // (0,4)(4,4)(8,4)
        // 把字符串里的 [哈哈] 找出来
        
        /*
        . 匹配任意字符，除了换行
        
        () 锁定要查找的内容
        
        * 匹配任意长度的内容
        
        ？尽量少的匹配
        
        
        */
            // 1.正则查找第一步
            
         //[] 是正则表达式保留字，在使用时，需要使用转义 \\
        let pattern = "\\[.*?\\]"
        /*
            1.正则表达式
            2. DotMatchesLineSeparators -- 允许 . 进行匹配包括换行
        */
        let reg = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators)
            
            // 通过这个正则去查找
            /*
                1. 我们要查找的字符串
                2. 默认值
                3. range
            
            */
            
             //2. 正则查找第二步
            // [NSTextCheckingResult]
          let results =  reg.matchesInString(weiboString, options: [], range: NSMakeRange(0, weiboString.characters.count))
            
           
            
             //3 正则查找第三步
            for result in results.reverse() {
                
                
                let subString = (weiboString as NSString).substringWithRange(result.range)
               
                let emoticon = HMEmoticonManager.searchEmoticon(subString)
                
                // 0.拼接图片路径
                guard let path = emoticon?.path ,png = emoticon?.png else {
                    
                    return nil
                }
                let imagePath = "\(path)/\(png)"
                // 1. 创建一个附件对象
                let attachment = NSTextAttachment()
                
                // 1.1  赋值图片
                attachment.image = UIImage(named: imagePath)
                
                // 2. 创建一个NSAttributeString
                let attribute = NSAttributedString(attachment: attachment)
                
                // 3. 拼接
//            beforeAttribute.appendAttributedString(attribute)
                beforeAttribute.replaceCharactersInRange(result.range, withAttributedString: attribute)
                
            }
            
            
        }catch {
            
            
        }
        
       
        
        return beforeAttribute
        
    }
}
